package com.wl.designpattern.factory.gcff;

/**
 * 工厂方法模式
 * 定义一个用于创建对象的接口，让子类决定实例化哪个类。
 *
 * Product（抽象产品类）：要创建的复杂对象，定义对象的公共接口。
 * ConcreteProduct（具体产品类）：实现Product接口。
 * Factory（抽象工厂类）：该方法返回一个Product类型的对象。
 * ConcreteFactory（具体工厂类）：返回ConcreteProduct实例。
 *
 * 应用场景
 * 生成复杂对象时，无需知道具体类名，只需知道相应的工厂方法即可。
 *
 * 优点
 * 符合开放封闭原则。新增产品时，只需增加相应的具体产品类和相应的工厂子类即可。
 * 符合单一职责原则。每个具体工厂类只负责创建对应的产品。
 *
 * 缺点
 * 一个具体工厂只能创建一种具体产品。
 * 增加新产品时，还需增加相应的工厂类，系统类的个数将成对增加，增加了系统的复杂度和性能开销。
 * 引入的抽象类也会导致类结构的复杂化。
 *
 * android中应用
 * ThreadFactory
 *
 *
 * Created by wangliang on 2021/2/27.
 */
public class Test {
    public static void main(String[] args) {
        //产品A
        Factory factoryA = new FactoryA();
        Product productA = factoryA.create();
        productA.show();
        //产品B
        Factory factoryB = new FactoryB();
        Product productB = factoryB.create();
        productB.show();
    }
}
